package fr.cephb.bio;



public class AcidNucleicUtils
	{
	public static boolean isATGC(CharSequence s)
        {
		if(s.length()==0) throw new IllegalArgumentException("sequence cannot be empty");
		for(int i=0;i< s.length();++i) if(!isATGC(s.charAt(i))) return false;
		return true;
		}

	public static boolean isATGC(char base)
		{
		switch(base)
			{
			case 'A':
			case 'a':
			case 'T':
			case 't':
			case 'G':
			case 'g':
			case 'C':
			case 'c':
				return true;
			default:
				return false;
			}
		}
	
	
	public static String reverseComplement(CharSequence s)
        {
        StringBuilder b= new StringBuilder(s.length());
        for(int i=0;i< s.length();++i)
                {
                b.append(complement(s.charAt((s.length()-1)-i)));
                }
        return b.toString();
        }


	
    public static char complement(char b)
        {
        switch(b)
	        {
	        case 'A': return 'T';
	        case 'T': return 'A';
	        case 'G': return 'C';
	        case 'C': return 'G';
	
	        case 'a': return 't';
	        case 't': return 'a';
	        case 'g': return 'c';
	        case 'c': return 'g';
	
	        case 'w': return 'w';
	        case 'W': return 'W';
	
	        case 's': return 's';
	        case 'S': return 'S';
	
	        case 'y': return 'r';
	        case 'Y': return 'R';
	
	        case 'r': return 'y';
	        case 'R': return 'Y';
	
	        case 'k': return 'm';
	        case 'K': return 'M';
	
	        case 'm': return 'k';
	        case 'M': return 'K';
	
	        case 'b': return 'v';
	        case 'd': return 'h';
	        case 'h': return 'd';
	        case 'v': return 'b';
	
	
	        case 'B': return 'V';
	        case 'D': return 'H';
	        case 'H': return 'D';
	        case 'V': return 'B';
	
	        case 'N': return 'N';
	        case 'n': return 'n';
	
	        default: throw new IllegalArgumentException("bad base "+b);
	        }
        }
	}
